package com.ruoyi.common.utils.token;


import org.apache.shiro.crypto.hash.SimpleHash;

/**
 * @author sange
 * @Description: 生成MD5
 */
public class CustomMD5 {

    private static final String LOGIN = "client_login";

    /**
     * @param password 密码
     * @return String    返回类型
     * @Title: passwordAndSalt
     * @Description: TODO 字符串MD5加密
     */
    public static String strAndSalt(String password) {
        return md5(password, null, 0);
    }

    /**
     * @param password 密码
     * @param salt     盐值
     * @return String    返回类型
     * @Title: passwordAndSalt
     * @Description: TODO 密码放在前面的自定义散列次数的MD5加密
     */
    public static String strAndSalt(String password, String salt) {
        return md5(password, salt, 1024);
    }

    /**
     * @param password 密码
     * @return String    返回类型
     * @Title: passwordAndSalt
     * @Description: TODO 密码放在前面的自定义散列次数的MD5加密
     */
    public static String strAndSaltLogin(String password) {
        return md5(password, LOGIN, 1024);
    }

    /**
     * @param password 密码
     * @param salt     盐值
     * @return String    返回类型
     * @Title: passwordAndSalt
     * @Description: TODO 自定义MD5散列次数，密码放在前面的自定义散列次数的MD5加密
     */
    public static String strAndSalt(String password, String salt, int hashIterations) {
        return md5(password, salt, hashIterations);
    }

    /**
     * @param str1           密码
     * @param str2           盐
     * @param hashIterations 散列次数
     * @return String    返回类型
     * @Title: md5
     * @Description: TODO md5的加密，私有方法
     */
    private static String md5(String str1, String str2, int hashIterations) {
        SimpleHash simpleHash = new SimpleHash("md5", str1, str2, hashIterations);
        return simpleHash.toString();
    }

    /**
     * @param str1 密文
     * @param str2 未加密字段
     * @return
     * @Description: TODO 口令是否合法
     */
    public static boolean checkStr(String str1, String str2) {
        if (str1.equals(CustomMD5.strAndSalt(str2))) {
            return true;
        }
        return false;
    }

    /**
     * @param str1 密文
     * @param str2 未加密字段
     * @param salt 盐
     * @return
     * @Description: TODO 口令是否合法
     */
    public static boolean checkStr(String str1, String str2, String salt) {
        if (str1.equals(CustomMD5.strAndSalt(str2, salt))) {
            return true;
        }
        return false;
    }

    /**
     * @param str1 密文
     * @param str2 未加密字段
     * @return
     * @Description: TODO 口令是否合法
     */
    public static boolean checkStrLogin(String str1, String str2) {
        if (str1.equals(CustomMD5.strAndSalt(str2, LOGIN))) {
            return true;
        }
        return false;
    }

    /**
     * @param str1 密文
     * @param str2 未加密字段
     * @param salt 盐
     * @return
     * @Description: TODO 校验自定义加密口令是否合法
     */
    public static boolean checkStr(String str1, String str2, String salt, int hashIterations) {
        if (str1.equals(CustomMD5.strAndSalt(str2, salt, hashIterations))) {
            return true;
        }
        return false;
    }

    /**
     * e10adc3949ba59abbe56e057f20f883e
     * e10adc3949ba59abbe56e057f20f883e
     */


    public static void main(String[] args) {
        String s = strAndSaltLogin("123456");
        System.out.println(s);

        boolean staff = checkStrLogin("67c06b1bafe4f4cd05bcfc932e96b80b", "123456");
        System.out.println(staff);
    }

}
